///////////////////////////////////////////////////////////////////////////////
// File:        RealmdPlayer.hpp
// Author:      671643387@qq.com
// Description: 
///////////////////////////////////////////////////////////////////////////////

#if !defined(REALMD_REALMDPLAYER_HPP_)
#define REALMD_REALMDPLAYER_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <string>
#include "Common.hpp"
#include "auth/SRP6.hpp"
#include "util/ByteBuffer.hpp"
#include "player/Player.hpp"

///////////////////////////////////////////////////////////////////////////////
class RealmdPlayer : public Player
{
public:
    ///////////////////////////////////////////////////////////////////////////
    RealmdPlayer(void);
    ~RealmdPlayer(void);

public:
    ///////////////////////////////////////////////////////////////////////////
    bool _HandleLogonChallenge(void);
    bool _HandleLogonProof(void);
    bool _HandleReconnectChallenge(void);
    bool _HandleReconnectProof(void);
    bool _HandleRealmList(void);

protected:
    ///////////////////////////////////////////////////////////////////////////
    virtual void OnRead(void);
    virtual void OnClose(void);

private:
    ///////////////////////////////////////////////////////////////////////////
    void _SendProof(Sha1Hash& sha);
    void _LoadRealmlist(ByteBuffer& pkt, uint32_t id);

private:
    ///////////////////////////////////////////////////////////////////////////
    std::string     uname_;
    std::string     safeUname_;
    uint16_t        build_;
    bool            authed_;
    std::string     localizationName_;
    eAccountTypes   accountsecLv_;

    SRP6            srp_;
};

#endif //REALMD_REALMDPLAYER_HPP_
